####%@@@#*****++++*+++++**+===========*#*%@@@%%%%#@%###%%%%%%%%###%%%
+#%@@@@%#*++*+*+**++==++===--=+**+++=*%#%@@@@%%%%%%%%###%%#%%%%%%###%
*+*%@@%%*==++======---------=######**%%%@@@@@@%%%%%%%%####%%%%%%%@%%%
%###*==*--------------------+%%%###%##%%@%@@@@%%%%@%%%##%##%%#%%%@@@@
##*++=+*==---------==========#%##+=##**#%%%@@@%%%%%###**#%%##%%%%%@@@
#+=-===+==========+++++++****###*++*+=+++++**#%%%###***+++++++***##%%
##+========+++++++*****+***#######+++*####**+=#%%%%%%%%%%%###*+++===*
##*+=++++++++**********#**#**##%###*##%######+#%%%%%%%%%%%%%%%%%#**+*
+=++++*++***##**************#%%###%####%%%####%%%%%%%%%%%%%%%%%%%%%%%
++++********#####**##******%%*++*#%##*%%##%%%%%%%%%%%%%%%%%%%%%%%%%%%
*******+++**++************#%*+*###%##*%%###%%%%%%%%%%%%%%%%%%%%%%%%%%
****************##########****##*#%##**%@%##%%%%%%%%%%%%%%%%%%%%%%%%%
#*********#############%#########%%#%%######****###%%%%%%%%%%%%%%%%%%
###########%#%%%%%%%####%%%%%####*#****%%#%%%#######################%
####%%%%%%%%%%%%%%%%##########**#****#%%%%%%%%%%%%%%#################
%%%%%%%%%%%%%%%%%%%##**####+*######*####%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%########%%%%%%%%##**#%%%%%%%%%%#%#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@
%%%%%%%%#%%%%%%%%%%########%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%##%%%%%%%%%%%%###*###%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%###**###%%%%%%%%%%%%%%%@@%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%########%%%%%%%%%%%%%%@@@@@@%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%###########%%%@@@@@@@@@@@@@%%%###%%%%%%%%%%%%##%%%%
@@@@@%%@@@@@@@%%%%%%%%%%%%%%%%%@@@@@@@@@@@@@%%%%%%%%%%%%%%%%%%%%%%%%%